home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xml4j.jar / com / ibm / xml / internal / DefaultAttrPool.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-08-30  |  4.0 KB  |  314 lines

  1. package com.ibm.xml.internal;
  2.  
  3. import com.ibm.xml.framework.AttDef;
  4. import com.ibm.xml.framework.Attr;
  5. import com.ibm.xml.framework.AttrPool;
  6. import com.ibm.xml.framework.ParserState;
  7. import com.ibm.xml.framework.StringPool;
  8. import com.ibm.xml.framework.XMLErrorHandler;
  9. import org.xml.sax.AttributeList;
  10.  
  11. public final class DefaultAttrPool implements AttrPool, AttributeList {
  12.    static final int CHUNK_SHIFT = 5;
  13.    static final int CHUNK_SIZE = 32;
  14.    static final int CHUNK_MASK = 31;
  15.    static final int INITIAL_CHUNK_COUNT = 32;
  16.    static final int ATTRFLAG_SPECIFIED = 64;
  17.    static final int ATTRFLAG_LASTATTR = 128;
  18.    private StringPool fStringPool;
  19.    private XMLErrorHandler fErrorHandler;
  20.    private int fAttlistIndex = -1;
  21.    private int fAttlistLength;
  22.    private int fAttrCount;
  23.    private int[][] fAttName = new int[32][];
  24.    private int[][] fAttValue = new int[32][];
  25.    private byte[][] fAttTypeAndFlags = new byte[32][];
  26.  
  27.    public DefaultAttrPool(ParserState var1) {
  28.       this.fStringPool = var1.cacheStringPool();
  29.       this.fErrorHandler = var1.getErrorHandler();
  30.    }
  31.  
  32.    public void reset(ParserState var1) {
  33.       this.fStringPool = var1.cacheStringPool();
  34.       this.fErrorHandler = var1.getErrorHandler();
  35.       this.fAttlistIndex = -1;
  36.       this.fAttlistLength = 0;
  37.       this.fAttrCount = 0;
  38.    }
  39.  
  40.    public AttrPool resetOrCopy(ParserState var1) {
  41.       return new DefaultAttrPool(var1);
  42.    }
  43.  
  44.    private boolean ensureCapacity(int var1, int var2) {
  45.       try {
  46.          if (this.fAttName[var1][var2] == 0) {
  47.             return false;
  48.          }
  49.  
  50.          return true;
  51.       } catch (ArrayIndexOutOfBoundsException var5) {
  52.          int[][] var3 = new int[var1 * 2][];
  53.          System.arraycopy(this.fAttName, 0, var3, 0, var1);
  54.          this.fAttName = var3;
  55.          var3 = new int[var1 * 2][];
  56.          System.arraycopy(this.fAttValue, 0, var3, 0, var1);
  57.          this.fAttValue = var3;
  58.          byte[][] var4 = new byte[var1 * 2][];
  59.          System.arraycopy(this.fAttTypeAndFlags, 0, var4, 0, var1);
  60.          this.fAttTypeAndFlags = var4;
  61.       } catch (NullPointerException var6) {
  62.       }
  63.  
  64.       this.fAttName[var1] = new int[32];
  65.       this.fAttValue[var1] = new int[32];
  66.       this.fAttTypeAndFlags[var1] = new byte[32];
  67.       return true;
  68.    }
  69.  
  70.    public int addAttr(Attr var1, int var2) throws Exception {
  71.       int var3;
  72.       int var4;
  73.       if (var2 != -1) {
  74.          var3 = var2 >> 5;
  75.          var4 = var2 & 31;
  76.  
  77.          while(var2 < this.fAttrCount) {
  78.             if (this.fAttName[var3][var4] == var1.attName) {
  79.                this.fErrorHandler.error1(9, var1.attName);
  80.                return -1;
  81.             }
  82.  
  83.             ++var2;
  84.             ++var4;
  85.             if (var4 == 32) {
  86.                ++var3;
  87.                var4 = 0;
  88.             }
  89.          }
  90.       } else {
  91.          var3 = this.fAttrCount >> 5;
  92.          var4 = this.fAttrCount & 31;
  93.       }
  94.  
  95.       this.ensureCapacity(var3, var4);
  96.       this.fAttName[var3][var4] = var1.attName;
  97.       this.fAttValue[var3][var4] = var1.attValue;
  98.       this.fAttTypeAndFlags[var3][var4] = (byte)((var1.specified ? 64 : 0) | var1.attType);
  99.       int var5 = this.fAttrCount++;
  100.       return var5;
  101.    }
  102.  
  103.    public void setIsLastAttr(int var1) {
  104.       if (var1 >= 0 && var1 < this.fAttrCount) {
  105.          int var2 = var1 >> 5;
  106.          int var3 = var1 & 31;
  107.          byte[] var10000 = this.fAttTypeAndFlags[var2];
  108.          var10000[var3] = (byte)(var10000[var3] | 128);
  109.       }
  110.    }
  111.  
  112.    public int getAttrName(int var1) {
  113.       if (var1 >= 0 && var1 < this.fAttrCount) {
  114.          int var2 = var1 >> 5;
  115.          int var3 = var1 & 31;
  116.          return this.fAttName[var2][var3];
  117.       } else {
  118.          return -1;
  119.       }
  120.    }
  121.  
  122.    public int getAttType(int var1) {
  123.       if (var1 >= 0 && var1 < this.fAttrCount) {
  124.          int var2 = var1 >> 5;
  125.          int var3 = var1 & 31;
  126.          return this.fAttTypeAndFlags[var2][var3] & 63;
  127.       } else {
  128.          return -1;
  129.       }
  130.    }
  131.  
  132.    public int getAttValue(int var1) {
  133.       if (var1 >= 0 && var1 < this.fAttrCount) {
  134.          int var2 = var1 >> 5;
  135.          int var3 = var1 & 31;
  136.          return this.fAttValue[var2][var3];
  137.       } else {
  138.          return -1;
  139.       }
  140.    }
  141.  
  142.    public boolean isSpecified(int var1) {
  143.       if (var1 >= 0 && var1 < this.fAttrCount) {
  144.          int var2 = var1 >> 5;
  145.          int var3 = var1 & 31;
  146.          return (this.fAttTypeAndFlags[var2][var3] & 64) != 0;
  147.       } else {
  148.          return true;
  149.       }
  150.    }
  151.  
  152.    public boolean isLastAttr(int var1) {
  153.       if (var1 >= 0 && var1 < this.fAttrCount) {
  154.          int var2 = var1 >> 5;
  155.          int var3 = var1 & 31;
  156.          return (this.fAttTypeAndFlags[var2][var3] & 128) != 0;
  157.       } else {
  158.          return true;
  159.       }
  160.    }
  161.  
  162.    public void releaseAttrList(int var1) {
  163.       if (var1 != -1) {
  164.          int var2 = var1 >> 5;
  165.          int var3 = var1 & 31;
  166.  
  167.          boolean var4;
  168.          do {
  169.             var4 = (this.fAttTypeAndFlags[var2][var3] & 128) != 0;
  170.             this.fAttName[var2][var3] = -1;
  171.             if ((this.fAttTypeAndFlags[var2][var3] & 64) != 0) {
  172.                this.fStringPool.releaseString(this.fAttValue[var2][var3]);
  173.             }
  174.  
  175.             this.fAttValue[var2][var3] = -1;
  176.             ++var3;
  177.             if (var3 == 32) {
  178.                ++var2;
  179.                var3 = 0;
  180.             }
  181.          } while(!var4);
  182.  
  183.          if (this.fAttrCount == (var2 << 5) + var3) {
  184.             this.fAttrCount = var1;
  185.          } else {
  186.             try {
  187.                this.fErrorHandler.error(169);
  188.             } catch (Exception var5) {
  189.             }
  190.          }
  191.       }
  192.    }
  193.  
  194.    public AttributeList getAttributeList(int var1) {
  195.       this.fAttlistIndex = var1;
  196.       if (this.fAttlistIndex == -1) {
  197.          this.fAttlistLength = 0;
  198.       } else {
  199.          int var2 = this.fAttlistIndex >> 5;
  200.          int var3 = this.fAttlistIndex & 31;
  201.  
  202.          for(this.fAttlistLength = 1; (this.fAttTypeAndFlags[var2][var3] & 128) == 0; ++this.fAttlistLength) {
  203.             ++var3;
  204.             if (var3 == 32) {
  205.                ++var2;
  206.                var3 = 0;
  207.             }
  208.          }
  209.       }
  210.  
  211.       return this;
  212.    }
  213.  
  214.    public int getLength() {
  215.       return this.fAttlistLength;
  216.    }
  217.  
  218.    public String getName(int var1) {
  219.       if (var1 >= 0 && var1 < this.fAttlistLength) {
  220.          int var2 = this.fAttlistIndex + var1 >> 5;
  221.          int var3 = this.fAttlistIndex + var1 & 31;
  222.          return this.fStringPool.toString(this.fAttName[var2][var3]);
  223.       } else {
  224.          return null;
  225.       }
  226.    }
  227.  
  228.    public String getType(int var1) {
  229.       if (var1 >= 0 && var1 < this.fAttlistLength) {
  230.          int var2 = this.fAttlistIndex + var1 >> 5;
  231.          int var3 = this.fAttlistIndex + var1 & 31;
  232.          int var4 = this.fAttTypeAndFlags[var2][var3] & 63;
  233.          if (var4 == 9) {
  234.             var4 = 6;
  235.          }
  236.  
  237.          return AttDef.getAttTypeString(var4);
  238.       } else {
  239.          return null;
  240.       }
  241.    }
  242.  
  243.    public String getValue(int var1) {
  244.       if (var1 >= 0 && var1 < this.fAttlistLength) {
  245.          int var2 = this.fAttlistIndex + var1 >> 5;
  246.          int var3 = this.fAttlistIndex + var1 & 31;
  247.          return this.fStringPool.toString(this.fAttValue[var2][var3]);
  248.       } else {
  249.          return null;
  250.       }
  251.    }
  252.  
  253.    public String getType(String var1) {
  254.       int var2 = this.fStringPool.addSymbol(var1.intern());
  255.       if (var2 == -1) {
  256.          return null;
  257.       } else {
  258.          int var3 = this.fAttlistIndex >> 5;
  259.          int var4 = this.fAttlistIndex & 31;
  260.  
  261.          for(int var5 = 0; var5 < this.fAttlistLength; ++var5) {
  262.             if (this.fAttName[var3][var4] == var2) {
  263.                int var6 = this.fAttTypeAndFlags[var3][var4] & 63;
  264.                if (var6 == 9) {
  265.                   var6 = 6;
  266.                }
  267.  
  268.                return AttDef.getAttTypeString(var6);
  269.             }
  270.  
  271.             ++var4;
  272.             if (var4 == 32) {
  273.                ++var3;
  274.                var4 = 0;
  275.             }
  276.          }
  277.  
  278.          return null;
  279.       }
  280.    }
  281.  
  282.    public String getValue(String var1) {
  283.       int var2 = this.fStringPool.addSymbol(var1.intern());
  284.       if (var2 == -1) {
  285.          return null;
  286.       } else {
  287.          int var3 = this.fAttlistIndex >> 5;
  288.          int var4 = this.fAttlistIndex & 31;
  289.  
  290.          for(int var5 = 0; var5 < this.fAttlistLength; ++var5) {
  291.             if (this.fAttName[var3][var4] == var2) {
  292.                return this.fStringPool.toString(this.fAttValue[var3][var4]);
  293.             }
  294.  
  295.             ++var4;
  296.             if (var4 == 32) {
  297.                ++var3;
  298.                var4 = 0;
  299.             }
  300.          }
  301.  
  302.          return null;
  303.       }
  304.    }
  305.  
  306.    public int getFirstAttr(int var1) {
  307.       return var1 >= 0 && var1 < this.fAttrCount ? var1 : -1;
  308.    }
  309.  
  310.    public int getNextAttr(int var1) {
  311.       return this.isLastAttr(var1) ? -1 : var1 + 1;
  312.    }
  313. }
  314.